package com.example.springboot.service;

import cn.hutool.core.lang.Dict;
import com.example.springboot.common.Page;

import java.math.BigDecimal;
import java.util.List;

/**
 * 商品表(Product)表服务接口
 *
 * @author makejava
 * @since 2024-01-13 17:16:26
 */
public interface ProductService {


    /**
     * 测试
     *
     * @return
     */
    List<Product> test();


    /**
     * 获取所有商品信息
     *
     * @return
     */
    List<Product> selectAll();


    /**
     * 根据ID删除
     *
     * @param id
     */
    void deleteById(Integer id);


    /**
     * 根据ID更新信息
     *
     * @param product
     */
    void updateById(Product product);

    /**
     * 条件查询
     *
     * @param username
     * @param name
     * @param phone
     * @param status
     * @return
     */
    List<Product> selectByManyCondition(String username, String name, String phone, Integer status);

    /**
     * 条件查询 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @return
     */
    Page<Product> selectByPage(Integer currentPage, Integer pageSize);


    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param name
     * @param storeName
     * @param categoryName
     * @param status
     * @return
     */
    Page<Product> selectByManyConditionInpage(Integer currentPage, Integer pageSize, String name, String storeName, String categoryName, Integer status);


    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param name
     * @param storeName
     * @param categoryName
     * @return
     */
    Page<Product> selectByManyConditionNoStatusInpage(Integer currentPage, Integer pageSize, String name, String storeName, String categoryName);


    /**
     * 批量删除
     *
     * @param ids
     */
    void deleteByIds(List<Integer> ids);


    /**
     * 添加商品
     *
     * @param product
     */
    void addProduct(Product product);

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    Product selectById(Integer id);


    BigDecimal selectProductCountByCategoryId(Integer id);

    List<Product> selectTop10CategoryStore(Integer id);

    List<Product> selectTop10CategoryAdmin();


    long getTotal();

    List<Product> selectByProductIds(Integer currentPage, Integer pageSize, Integer[] productIdArray);

    Page<Product> loadStoreProducts(Integer currentPage, Integer pageSize, Integer id);

    int getUserFavoriteProductCount(Integer[] productIdsArray);

    int getStoreTotal(Integer id);

    Page<Product> selectByPageInStore(Integer currentPage, Integer pageSize, Integer id);

    Dict mainProducts();

    List<Product> getRecommendedProducts();


    List<Product> getRandomProducts(Integer size);

    Page<Product> selectByCategory(Integer currentPage, Integer pageSize, Integer id);

    Page<Product> selectByCondition(Integer currentPage, Integer pageSize, String condition);

    List<Product> loadStoreNewProducts(Integer id);

    List<Product> loadRecommendedProducts(Integer id);

    void update(Product product);
}
